package com.lottery.material.service.admin.portaluser;

import com.lottery.material.pojo.page.Page;
import com.lottery.material.pojo.page.PageData;
import com.lottery.material.pojo.portaluser.PortalUserInfo;
import com.lottery.material.pojocustom.portaluser.PortalUserInfoCustom;
import com.lottery.material.util.ResponseResult;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * Description：前端用户信息服务接口
 * Created by 朱正磊 on 2019-04-13 17:41
 */
public interface PortalUserInfoService {

    /**
     * description：新增一条数据
     * user 朱正磊
     * time 2019-04-20 15:14
     * @param request 请求对象
     * @param portalUserInfo 对象
     * @return 返回持久化操作数据库状态值
     */
    Integer add(HttpServletRequest request, PortalUserInfo portalUserInfo);

    /**
     * description：根据主键物理删除
     * user 朱正磊
     * time 2019-04-20 15:13
     * @param id 主键
     * @return 返回持久化操作数据库状态值
     */
    Integer deleteById(Integer id);

    /**
     * description：根据主键查询唯一数据
     * user 朱正磊
     * time 2019-04-20 15:15
     * @param id 主键
     * @return 返回唯一数据
     */
    PortalUserInfo findById(Integer id);

    /**
     * description：根据主键修改一条数据
     * user 朱正磊
     * time 2019-04-20 15:16
     * @param request 请求对象
     * @param portalUserInfo 对象
     * @return 返回持久化操作数据库状态值
     */
    Integer updateById(HttpServletRequest request, PortalUserInfo portalUserInfo);

    /**
     * description：根据注册方式以及用户状态查询前端用户列表信息
     * user 朱正磊
     * time 2019-04-22 14:15
     * @param logonMode 注册方式（1：前台正常流程注册；2：后台运营人员注册）
     * @param userStatus 用户状态（1：启用；2：禁用；3：已删除）
     * @return 返回前端用户列表信息
     */
    List<PortalUserInfoCustom> findPortalUserInfoByLogonMode(Integer logonMode, Integer userStatus);

    /**
     * description：查询扩展类分页列表
     * user 朱正磊
     * time 2019-04-17 17:01
     * @param page 分页对象
     * @return 返回扩展类分页列表数据
     */
    List<PortalUserInfoCustom> findCustomListPage(Page page);

    /**
     * description：查询扩展类列表（用于导出Excel）
     * user 朱正磊
     * time 2019-04-26 17:25
     * @param pd 参数封装对象，其实本质上是一个Map
     * @return 返回扩展类列表数据
     */
    List<PortalUserInfoCustom> selectListAll(PageData pd);

    /**
     * description：根据id集合进行查询多条扩展类数据（用于导出Excel）
     * user 朱正磊
     * time 2019-04-26 17:25
     * @param ids 选中的行数据的id拼接而成的字符串
     * @return 返回扩展类列表数据
     */
    List<PortalUserInfoCustom> selectListByIds(String ids);

    /**
     * description：根据主键查询唯一扩展类数据
     * user 朱正磊
     * time 2019-04-17 17:03
     * @param id 主键
     * @return 返回唯一扩展类数据
     */
    PortalUserInfoCustom findCustomById(Integer id);

    /**
     * description：批量禁用
     * user 朱正磊
     * time 2019-04-24 16:37
     * @param ids 主键集合(多个id以,进行拼接)
     * @return 返回持久化操作数据库状态值
     */
    Integer updateBatchBan(String ids);

    /**
     * description：批量启用
     * user 朱正磊
     * time 2019-04-24 16:37
     * @param ids 主键集合(多个id以,进行拼接)
     * @return 返回持久化操作数据库状态值
     */
    Integer updateBatchNotBan(String ids);

    /**
     * description：根据用户昵称查询数据集合
     * user 朱正磊
     * time 2019-04-28 16:42
     * @param nickName 用户昵称
     * @param id 主键
     * @return 返回数据集合
     */
    List<PortalUserInfo> findByNickName(String nickName, Integer id);

    /**
     * description：根据登录手机号查询数据集合
     * user 朱正磊
     * time 2019-04-28 16:42
     * @param loginPhoneNumber 登录手机号
     * @param id 主键
     * @return 返回数据集合
     */
    List<PortalUserInfo> findByLoginPhoneNumber(String loginPhoneNumber, Integer id);

    /**
     * description：调整金币
     * user 朱正磊
     * time 2019-04-29 14:44
     * @param request 请求对象
     * @return 返回持久化操作数据库状态值
     */
    Integer updateAddOrSub(HttpServletRequest request);

    /**
     * description：前端用户列表查询（用于导出Excel）（这是另外一种导出Excel的方式）
     * user 朱正磊
     * time 2019-06-05 15:00
     * @param key 缓存key
     * @param pd 参数封装对象，其实本质上是一个Map
     * @param start 开始索引（包括）
     * @param end 结束索引（不包括）
     * @param type 方法作用类型：0-查询总数据；1-分段从缓存获取数据；2-删除缓存
     * @return 返回响应对象
     */
    ResponseResult portalUserInfoExportMethods(String key, PageData pd, Integer start, Integer end, Integer type);

}
